<?php
/**
 * 算法类
 * User: jinzhi<admin@end.wiki>
 * Date: 2017/10/29
 * Time: 11:18
 */
namespace core;

use exception\DivisorCanNotBeZeroException;
use exception\NotNumericException;

class Division implements AlgorithmInterface {

    public $label = '/';

    /**
     * 除法运算
     * @param Number $divisor 除数
     * @param Number $dividend 被除数
     * @throws NotNumericException [603]计算元素中有非数值异常
     * @throws DivisorCanNotBeZeroException [602]被除数为零异常
     * @return Number
     */
    protected function division($dividend,$divisor){
		// 对数据为空的情况做处理
		if(is_null($dividend) || $dividend == ''){
			$dividend = 1;
		}
		if(is_null($divisor) || $divisor == ''){
			$divisor = 1;
		}
        // 检查除数与被除数是否为数值
        if(!is_numeric($divisor) || !is_numeric($dividend)){
            throw new NotNumericException();
        }
        // 检查被除数是否为0
        if($divisor == 0){
            // 因为数据的复杂性(可能会出现空值和0的情况，所以暂时返回这种结果),让程度得以继续运行
            return 0;
        }
        // 计算返回结果
        $result = $dividend / $divisor;
        return $result;
    }

    public function compute($params){
        return $this->division($params[0],$params[1]);
    }
}